package ar.com.tallerdos.smartdinner.sync;

import android.util.Log;
import android.widget.Toast;
import ar.com.tallerdos.smartdinner.R;
import ar.com.tallerdos.smartdinner.activity.ComidaActivity;
import ar.com.tallerdos.smartdinner.gson.serializer.DescuentoSerializer;
import ar.com.tallerdos.smartdinner.model.Comida;
import ar.com.tallerdos.smartdinner.model.Descuento;
import ar.com.tallerdos.smartdinner.util.UsrManager;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class DescuentoSincronizador extends Tarea {
    
    private static final String APLICAR_DESCUENTO_SERVICE = "aplicarDescuento.php";
    private Comida comida;
    private String codigoDescuento;
    private ComidaActivity activity;
    
    private Boolean descuentoInvalido = false;
    private Boolean descuentoVencido = false;
    
    public DescuentoSincronizador(ComidaActivity activity, Comida comida, String codigoDescuento) {
	this.comida = comida;
	this.codigoDescuento = codigoDescuento;
	this.activity = activity;
    }

    @Override
    public Integer realizarTarea() {
	if (UsrManager.getInstance().getUsuario() == null) {
	    return 0;
	}
	String response = llamarWebService(SERVER_URL + "/" + 
		APLICAR_DESCUENTO_SERVICE + "?" +
		"pedido_id=" + comida.getCodigo() + "&" +
		"descuento_codigo=" + codigoDescuento.replaceAll(" ", "%20"));

	if (response != null && response.length() > 0) {
	    if (response.charAt(0) == '{') {
		parsearJson(response);
	    } else {
		if (response.contains("-1")) {
		    descuentoVencido = true;
		} else {
		    descuentoInvalido = true;
		}
	    }
	} else {
	    descuentoInvalido = true;
	}

	Log.i("log_tag", "Terminando la notificacion del descuento");
	return null;
    }

    private void parsearJson(String response) {
	Gson gson = new GsonBuilder()
		.registerTypeAdapter(Descuento.class, new DescuentoSerializer())
		.create();

	Descuento descuento = gson.fromJson(response, new TypeToken<Descuento>() {}.getType());
	
	if (descuento != null && descuento.esValido()) {
	    this.comida.setDescuento(descuento);
	}
    }
    
    @Override
    public void onPostExecute() {
	if (descuentoInvalido) {
	    Toast.makeText(activity.getApplicationContext(), activity.getResources().getString(R.string.descuentoInvalidoMsj), Toast.LENGTH_SHORT).show();
	} else if (descuentoVencido) {
	    Toast.makeText(activity.getApplicationContext(), activity.getResources().getString(R.string.descuentoVencidoMsj), Toast.LENGTH_SHORT).show();
	} else {
	    Toast.makeText(activity.getApplicationContext(), activity.getResources().getString(R.string.descuentoOkMsj), Toast.LENGTH_SHORT).show();
	    this.activity.recalcularTotal();	    
	}
    }

}
